<?php
declare(strict_types=1);
namespace app\common\lib\sms;
use TencentCloud\Sms\V20190711\SmsClient;
// 导入要请求接口对应的 Request 类
use TencentCloud\Sms\V20190711\Models\SendSmsRequest;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Common\Credential;
// 导入可选配置类
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use think\facade\Log;
class TencentSms {
    public static function sendmsg(string $phone,int $TemplateParamSet)
    {
        // 腾讯云账户秘密ID，注意不是短信中的id
        $SecretId = config('Tencentyun.SecretId');
        // 腾讯云账户中的秘钥key
        $SecretKey = config('Tencentyun.SecretKey');

        // 腾讯云短信应用appid。应用管理 > 应用列表中的应用id
        $AppID = config('Tencentyun.AppID');
        // 模板签名内容。一定是要 国内短信 > 签名管理 > 中的签名内容
        $smsSign = config('Tencentyun.smsSign');
        // 正文模板中的模板id。   国内短信 > 正文模板管理 > 模板ID
        $templateId = config("Tencentyun.templateId");

        try {
            // 实例化认证对象
            $cred = new Credential($SecretId, $SecretKey);
            $httpProfile = new HttpProfile();
            $httpProfile->setEndpoint(config("Tencentyun.host"));

            // 实例化一个 http 选项
            $clientProfile = new ClientProfile();
            $clientProfile->setHttpProfile($httpProfile);

            // 实例化一个 client 选项
            $client = new SmsClient($cred, "", $clientProfile);

            // 实例化一个 sms 发送短信请求对象，每个接口都会对应一个 request 对象。
            $req = new SendSmsRequest();
            // 发送短信验证码配置参数
            $params = '{"PhoneNumberSet":["' . $phone . '"],"TemplateID":"' . $templateId . '",
            "Sign":"' . $smsSign . '","TemplateParamSet":["' . $TemplateParamSet . '"],"SmsSdkAppid":"' . $AppID . '"}';

            $req->fromJsonString($params);

            // 通过 client 对象调用 SendSms 方法发起请求
            $resp = $client->SendSms($req);

            //记录日志
            log::info('TencentCode-success' . $resp->toJsonString());
        } catch (TencentCloudSDKException $e) {
            log::error('TencentCode-error' . json_encode($e));
            return false;
        }
    }
}